using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TitanX;
using System;
using DG.Tweening;


//游戏全局的属性
[Serializable]
public class GameAttribute{
    public  int coin;
}


public class GameManger : MonoBehaviour { 
    // Start is called before the first frame update

    public static GameManger Instance;



    //行动点
    public  int actPoint;   
    //游戏全局属性
    public GameAttribute attribute;


    //回合：玩家回合，敌人回合
    public enum Round {player,emeny}

    //当前回合
    public Round round;
    //剩余的敌人数量，敌人死亡的时候，触发减少
    public int leaveEmenyNum;

    public Sprite[] pointSprite;
    
    public GameObject[] actpontGM;


    public int emenyPoint=3;




    //两个状态：选择，攻击执行
    public  enum HandleStart { choose, attExcute }


    public HandleStart handleStart;


    public Button startButton;


    public GameObject slider;

    float tempValue;

    float oldValue;

    public GameObject diceGm;

   
    private void Awake()
    {
        Instance = this;

       // diceGm.SetActive(true);
      diceGm.GetComponent<Animator>().speed = 0;

        //从对象池中生成固定的对象数量+类型
     


        float orthographicSize = Camera.main.fieldOfView;

        slider.GetComponent<Slider>().onValueChanged.AddListener((float value) =>
        {
            tempValue = value;
            //取反之与
              Camera.main.fieldOfView = orthographicSize + (6.2f - value);
           
            //逻辑处理
        });

        

    }

    //如果再次点击相同的方块，就切换为执行状态
    void Start()
    {

        StartPlayerRound();

        //敌人的生成逻辑 -- 对象池
        //  emenyArray = GameObject.FindGameObjectsWithTag ("Enemy");
        //先构建好一个迭代器

        startButton.onClick.AddListener(delegate {
            //设置动画，显示点数
         
        });
    }

    public void reduceLeaveEmenyNum(int i) {
        
        if (leaveEmenyNum > 0) {
            leaveEmenyNum -= i;

            if (leaveEmenyNum <= 0) {

                Controller.Instance.RemoveDenseFog();
                Debug.Log("接触迷雾11");
            }
        }




    }

    /**
        掷完骰子后调用
    */
    public void RollAfter(int v)
    {
        if (v == 1)
        {
            //抉择卡
            // Player.Instance.

        }
        else if (v == 6)
        {
            //事件卡
        }
        else {

            ViewManger.Instance.updateEvenPlayCard(true);
        }

        actPoint = v;
        //初始化点数UI
        InitPointView();
        //开始玩家回合
      
        PlayerWaitBoxManger.Instance.Show();
    }

    public void startRollDice() {
        // actPoint = 0;


       // diceGm.SetActive(true);
        DiceManger.Instance.reSet();

        Debug.Log("掷骰子了？？？");
        
        diceGm.GetComponent<Animator>().speed = 1;
        //骰子 位置征信
        //翻转卡片

        //   startButton.gameObject.SetActive(true);

    }


    // Update is called once per frame
    void Update()
    {
        

        if (Input.GetMouseButtonUp(0))
        {
            if (tempValue != oldValue || tempValue == 0 && oldValue == 0)
            {
               
                oldValue = tempValue;

                slider.GetComponent<Slider>().value = 1f;


                Camera.main.DOOrthoSize(5.6f, 0.3f);
            }
          
        }
        

    }

   


    /// <summary>
    /// 减少点数 --敌人还是玩家的点数呢
    /// </summary>
    public void  reducePoint()
    {

        //减少点数，减少的是玩家还是敌人的呢


        //这里的acpoin代表不同的涵义，player因为只有一个

      
        if (actPoint > 0)
        {
            actPoint--;
            if(round.Equals(Round.player)){

                 actpontGM[actPoint].GetComponent<Image>().sprite = pointSprite[1];
                    if (actPoint == 0) {
                        //重新开始掷骰子
                    //   startRollDice();
                        round = Round.emeny;
                        //点数恢复
                        actPoint=emenyPoint;
                        StartEmenyRound();
                        //TODO： 回合结束-开始敌人回合
                        //敌人AI开始移动 ，一个一个敌人的
                    }
            }
            if(round.Equals(Round.emeny)){
          
                if (actPoint == 0)
                {
                    
                   
                    //开始玩家回合
                    round = Round.player;
                    StartPlayerRound();
                }


                 

            } 

        }
       


    }





    public  void StartEmenyRound(){

        ViewManger.Instance.switchPlayerCard(CardType.emeny);
        Debug.Log("开始敌人回合");
        actPoint = 1;
        startButton.gameObject.SetActive(false);
       // Player.Instance.preBox.SetActive(false);
        PlayerWaitBoxManger.Instance.Hide();

        //等玩家移动完了，在开始
        //直接开始敌人寻路逻辑
        round =Round.emeny;
        //隐藏玩家移动以及UI
        //敌人AI开始移动，敌人的移动也是随机的，敌人固定三回合？？？可
        //一次只能有一个人在追踪玩家
        //  GameObject lockedEmeny = Player.Instance.LockedEmeny;



        //所有的敌人都要一次进入状态下


        //获取所有对象池中的敌人，循环调用接口

        List<GameObject> alleEmeny = PoolManger.Instance.getAllSavePool("emeny");

        foreach (GameObject emeny in alleEmeny) {

            emeny.GetComponent<FSM>().TransitionState(StateType.Stand);

        }



        //当前敌人进入 追踪模式


    }



    //开始玩家回合
    public void  StartPlayerRound(){
        //掷色子
        //先清空，敌人的状态
        //  Player.Instance.preBox.SetActive(true);
        ViewManger.Instance.switchPlayerCard(CardType.player);
       // startRollDice();
        round = Round.player;
        handleStart =HandleStart.choose;
        startRollDice();
    }


    /// <summary>
    /// 只玩投资，初始化显示的点数
    /// </summary>
    public void InitPointView() {


        //加个动画效果
        Sequence quence = DOTween.Sequence();
        for (int i = 0; i < actPoint; i++) {
            actpontGM[i].GetComponent<Image>().sprite =pointSprite[0];
          
           actpontGM[i].SetActive(true);

           Tweener tweener =actpontGM[i].transform.DOScale(new Vector3(0.15f, 0.15f, 0.15f),0.1f);
            quence.Append(tweener);


        }

        quence.Play();





    }



 

   public void AddCoin(int i){
       attribute.coin += i;

   }
 public void ReduceCoin(int i){
       attribute.coin -= i;

   }



}
